/*
    AOP：面向切面编程
         用AOP可以对业务逻辑的各个部分进行隔离，从而使得业务逻辑各部分之间的耦合度降低，提高程序的可重用性，同时提高了开发的效率。

         自己理解：起到代码化简的作用，若成百的类中都有相同的业务，使用AOP切面编程就可以在作用范围中让所有的类，方法等都使用切面中的功能

    1. 1 AOP编程思想
            AOP是面向切面的编程思想：将业务逻辑模块中，需要进行处理的功能点，从逻辑上的角度将其作为一个整体进性管理：
            这个整体，就可以看做是有这些不同模块中的逻辑点构成的一个面；这个面就是切面；
    1. 2 AOP编程内容要求
            连接点（Joinpoint):  进性切面业务处理时的时机点，例如方法执行前、方法执行后、抛出异常等时机点；
            增强（Advice):       添加特定连接点上的一段业务逻辑处理代码；也就是在连接点上执行的业务处理过程；就是在特定连接点上触发的一组动作；
            切入点（PointCut):   被增强的连接点就是切入点；
            织入（Weaving):      将增强添加到目标对象的具体的连接点的过程。也就是将增强和连接点结合的过程就是织入；
            切面（Aspect):       切面由切入点和增强构成。切面就是切入点的集合；AOP就是通过切面来管理连接点和增强的；添加了增强功能的连接点；
            目标对象（Target):    需要添加增强的目标类。（被代理的目标类）
            代理（Proxy):        目标对象通过AOP生成的代理对象；代理和目标对象之间是代理和被代理的关系：
            引入（Introduction): 是一种特殊的增强；可以为目标对象添加一些属性和方法；一般用作动态的给目标对象附加一些行为能力；
    总结：
        把＂增强”使用＂织入”方式结合在＂连接点”上构成了“切入点”，“切入点＂汇集成”切面”；
        AOP就是使用动态代理等方式对切面的管理机制；



    AOP面向切片编程的注解：
        1.@Aspect	切面声明，标注在类、接口（包括注解类型）或枚举上，作用是把当前类标识为一个切面供容器读取，有了该注解，就说明使用AOP编程
        2.@Pointcut 切入点声明，即切入到哪些目标类的目标方法。
                    value 属性指定切入点表达式，默认为 ""，用于被通知注解引用，这样通知注解只需要关联此切入点声明即可，无需再重复写切入点表达式
        3.@Before   前置通知, 在目标方法(切入点)执行之前执行。
                    value 属性绑定通知的切入点表达式，可以关联切入点声明，也可以直接设置切入点表达式
                    注意：如果在此回调方法中抛出异常，则目标方法不会再执行，会继续执行后置通知 -> 异常通知。
        4.@After    后置通知, 在目标方法(切入点)执行之后执行

             @Before与 @After的区别：
                @Before是在 前置通知, 在目标方法(切入点)执行之前执行，@After后置通知, 在目标方法(切入点)执行之后执行
                相同点 ：每执行一个类或者是方法，都会对应的执行一次@Before和@After
                        @Before：初始化方法   对于每一个测试方法都要执行一次（注意与BeforeClass区别，后者是对于所有方法执行一次）
                        @After：释放资源  对于每一个测试方法都要执行一次（注意与AfterClass区别，后者是对于所有方法执行一次）

       5.@BeforeClass：针对所有测试，只执行一次，且必须为static void
       6.@AfterClass：针对所有测试，只执行一次，且必须为static void

       7.@AfterReturning  返回通知, 在目标方法(切入点)返回结果之后执行，在 @After 的后面执行
                        pointcut 属性绑定通知的切入点表达式，优先级高于 value，默认为 ""
       8.@AfterThrowing   异常通知, 在方法抛出异常之后执行, 意味着跳过返回通知
                        pointcut 属性绑定通知的切入点表达式，优先级高于 value，默认为 ""
                        注意：如果目标方法自己 try-catch 了异常，而没有继续往外抛，则不会进入此回调函数
       9.@Around	环绕通知：目标方法执行前后分别执行一些代码，发生异常的时候执行另外一些代码

    实现步骤：
        1.在spring容器注解的基础上创建一个类，提供 @Aspect	切面声明，作用是把当前类标识为一个切面供容器读取，有了该注解，就说明使用AOP编程
        2.在该类中使用编程注解来确定目标方法的执行时间
        3.类中的方法不需要去调用，只要注解执行对应方法自动执行


 */
public class BiJi {
}
